package pl.uz.zgora.plan;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class DzienDataSource {
private SQLiteDatabase database;
	
	public DzienDataSource(SQLiteDatabase database)
	{
		this.database = database;
	}
	
	public boolean addDzien(final Dzien dzien, final String kalendarzId)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		if(database.isReadOnly())
			throw new SQLiteException("Wrong database connection!");
		
		ContentValues values = new ContentValues();
		values.put(PlanDatabaseHandler.KEY_WEEK, dzien.getTydzien());
		values.put(PlanDatabaseHandler.KEY_DATE, dzien.getData());
		values.put(PlanDatabaseHandler.KEY_CAL_ID, kalendarzId);
		
		if(database.insert(PlanDatabaseHandler.TABLE_DZIEN, null, values) == -1)
			return false;
		
		return true;
	}
	
	public boolean addDzienList(final ArrayList<Dzien> dni, final String kalendarzId)
	{
		if(dni == null || dni.size() == 0)
			return false;
		
		for(Dzien dzien: dni)
			if(!addDzien(dzien, kalendarzId))
				return false;
		
		return true;
	}
	
	public ArrayList<Dzien> getDzienList()
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Dzien> dni = new ArrayList<Dzien>();
		Cursor cursor = null;
			
		cursor = database.query(PlanDatabaseHandler.TABLE_DZIEN,
				null, null, null, null, null, null);
	
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			final Dzien dzien = cursorToDzien(cursor);
			dni.add(dzien);
			cursor.moveToNext();
		}
		// Make sure to close the cursor
		cursor.close();
		
		return dni;
	}
	
	public ArrayList<Dzien> getDniForKaledarz(final String kalendarzId) throws ParseException {
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Dzien> dni = new ArrayList<Dzien>();
		Cursor cursor = null;
		cursor = database.query(PlanDatabaseHandler.TABLE_DZIEN,
				null, "kalendarzId = " + kalendarzId, null, null, null, null);
		
		cursor.moveToFirst();
		final Calendar calendar = Calendar.getInstance();
		final SimpleDateFormat parser = new SimpleDateFormat("dd-MM-yyyy");
		while (!cursor.isAfterLast()) {
			final Dzien dzien = cursorToDzien(cursor);
			Date data = parser.parse(dzien.getData());
			if(data.getMonth() == calendar.get(Calendar.MONTH)) {
				if(data.getDate() >= calendar.get(Calendar.DAY_OF_MONTH)) {
					dni.add(dzien);
				}
			} else if(data.getMonth() > calendar.get(Calendar.MONTH)) {
				dni.add(dzien);
			}
			
			cursor.moveToNext();
		}
		// Make sure to close the cursor
		cursor.close();
		
		return dni;
	}
	
	public static Dzien cursorToDzien(Cursor cursor)
	{
		Dzien dzien = new Dzien();
		dzien.setTydzien(cursor.getString(1));
		dzien.setData(cursor.getString(0));
		return dzien;
	}
}
